package com.jdym;

import lombok.Data;

import java.util.HashMap;
import java.util.Map;

//统一返回结果
@Data
public class R {
    private Integer code;
    private String message;
    private Map<String ,Object> data=new HashMap<>();

    //    将构造方法私有化，防止被外部直接调用
    private R(){ }

    //返回成功结果
    public static R ok(){
//        通过本类静态方法访问私有化的构造函数
        R r=new R();
        r.setCode(ResponseEnum.SUCCESS.getCode());
        r.setMessage(ResponseEnum.SUCCESS.getMessage());
        return r;
    }
    //    返回失败结果
    public static R error(){
        R r=new R();
        r.setCode(ResponseEnum.Error.getCode());
        r.setMessage(ResponseEnum.Error.getMessage());
        return r;
    }
    //    设置特定的结果
    public static R setResult(ResponseEnum responseEnum){
        R r=new R();
        r.setCode(responseEnum.getCode());
        r.setMessage(responseEnum.getMessage());
        return r;
    }

    public R data(String key,Object value){
        this.data.put(key,value);
        //his作为返回值时，返回的是调用某方法的对象的引用，这个方法正是包含“return this;”这行命令的那个方法；更简单点说，就是谁调用返回的就是谁。由于返回的是对象引用，所以this不能用在静态成员方法中，只能在非静态成员方法中出现。
        return this;
    }

    public R data(Map<String,Object> map){
        this.setData(map);
        return this;
    }

    /**
     * 返回特定的响应消息消息
     * @param message
     * @return
     */
    public  R message(String message){
        this.setMessage(message);
        return this;
    }

    public R code(Integer code){
        this.setCode(code);
        return this;
    }

}
